为了账号安全,请及时绑定邮箱和手机立即绑定

实现一个 jQuery 的API

标签:
JQuery

上图,看最终结果:

// 实现一个 jQuery 的APIwindow.jQuery = function(_x){  let e;  if(typeof _x === "string"){
    e = document.querySelectorAll(_x);
  }else{
    e = _x;
  }  return {    addClass: function(_classStr){      for(let i=0; i<e.length;i++){
        e[i].classList.add(_classStr);
      }
    },    setText: function(_textStr){      for(let i=0; i<e.length;i++){
        e[i].textContent = _textStr;
      }
    }
  }
}window.$ = jQueryvar $div = $('div')

$div.addClass('red') // 可将所有 div 的 class 添加一个 red$div.setText('hi') // 可将所有 div 的 textContent 变为 hi

过程中一些细节:

第一部分:

开启一个独立的命名空间,window.jQuery = {},可改写成window.jQuery = function(){ return {};}

第二部分:

window.jQuery返回的是一个对象,对象里边存在一些可以操作的方法 .addClass() .setText()

return {  addClass: function(){},  setText: function(){}
}

需要注意的是对象里边存在着遍历操作。

第三部分

window.$ = jQuery 是什么鬼?
那就翻译一下吧,看这里 >>> window.$ = window.jQuery
其实就是简单的赋值(引用),为了更方便的使用这个 jQuery 。但是有一种习俗(约定成俗的规则),jQuery的变量前面要加 $ 前缀。防止以后犯晕不知道那个是原生的DOM,那个是jQuery的。

第四部分(最后一点)

细心的你可能会发现,window.jQuery中产生一个闭包了。 对就是产生一个闭包(闭包 = 环境因子 + 操作因子)。

  • 环境因子: 变量 e

  • 操作因子: addClass()    setText()

其实这些东西在实际的 jQuery 函数库中是就是这样的(不过他们实现的更高级一些),思路基本都相通的。



作者:地球心
链接:https://www.jianshu.com/p/ebfbab4ffd49

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消